useReducer
useReducer 소개
리액트(React)에서 상태를 관리하는 가장 일반적인 방법은 useState
훅을 사용하는 것입니다. 하지만 상태 관리가 복잡해지면 useState
로는 한계가 있을 수 있습니다. 이때 useReducer
훅을 사용하면 효율적으로 상태를 관리할 수 있습니다. useReducer
는 Redux와 같은 상태 관리 라이브러리에서 사용하는 리듀서 패턴을 적용하여 상태를 업데이트합니다.
useReducer 기본 사용법
useReducer
는 세 가지 인자를 받습니다:
- 리듀서 함수: 현재 상태와 액션을 받아서 새로운 상태를 반환하는 함수
- 초기 상태: 상태의 초기값
- 초기화 함수 (선택적): 초기 상태를 만드는 함수
리듀서 함수 예시
리듀서 함수는 두 가지 인자를 받습니다:
- state: 현재 상태
- action: 상태를 변경하는 데 필요한 정보를 담고 있는 객체
const initialState = { count: 0 };
function reducer(state, action) {
switch (action.type) {
case 'increment':
return { count: state.count + 1 };
case 'decrement':
return { count: state.count - 1 };
case 'reset':
return { count: 0 };
default:
throw new Error('Unknown action type');
}
}
useReducer 훅 사용 예시
아래는 useReducer
를 사용하여 카운터를 구현하는 예제입니다.
import React, { useReducer } from 'react';
const initialState = { count: 0 };
function reducer(state, action) {
switch (action.type) {
case 'increment':
return { count: state.count + 1 };
case 'decrement':
return { count: state.count - 1 };
case 'reset':
return { count: 0 };
default:
throw new Error('Unknown action type');
}
}
function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<div>
<p>Count: {state.count}</p>
<button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
<button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
<button onClick={() => dispatch({ type: 'reset' })}>Reset</button>
</div>
);
}
export default Counter;
useReducer의 장점
- 복잡한 상태 관리: 여러 상태값을 갖는 복잡한 로직을 단순화할 수 있습니다.
- 액션 중심의 상태 업데이트: 상태 변경이 액션을 통해 명확하게 이루어지므로 코드의 가독성이 높아집니다.
- 테스트 용이: 리듀서 함수는 순수 함수이므로 독립적으로 테스트하기가 쉽습니다.
주의해야 할 점
- 초기 상태 설정: 초기 상태는 단순한 값이나 객체일 수 있습니다. 하지만 만약 초 기 상태를 계산해야 한다면 초기화 함수를 세 번째 인자로 전달할 수 있습니다.
- 복잡한 액션 처리: 액션의 타입과 페이로드(payload)를 잘 정의하여야 합니다. 액션 타입은 문자열로 정의하고, 필요한 데이터를 액션 객체의 속성으로 포함시킵니다.
- 불변성 유지: 리듀서 함수는 불변성을 유지해야 하므로, 기존 상태를 직접 변경하지 않고 새로운 상태 객체를 반환해야 합니다.
더 알아보기
- Redux: 리액트 애플리케이션에서 더 복잡한 상태 관리를 위해
useReducer
대신 Redux를 사용할 수 있습니다. Redux 공식 문서 - 컨텍스트 API와 함께 사용:
useReducer
와 컨텍스트 API를 결합하면 전역 상태 관리가 가능합니다. React Context - 리듀서 패턴: 상태 관리 패턴에 대한 자세한 설명은 리듀서 패턴 문서를 참고하세요.
내용 요약
useReducer
훅은 복잡한 상태 관리 로직을 단순화하고, 상태 변경을 명확하게 할 수 있는 강력한 도구입니다. 리듀서 함수와 액션을 통해 상태를 관리하며, 초기 상태와 액션 타입을 잘 정의하여야 합니다. 이를 통해 상태 관리의 가독성을 높이고 유지보수를 쉽게 할 수 있습니다.